/**
  ******************************************************************************
  * @file    WIFI.h
  * @author  tuancheng_Zero
  * @version V0.1
  * @date    08/05/2024
  * @brief   WIFI function Handle 
  ******************************************************************************
*/ 
#ifndef _WIFI_H_
#define _WIFI_H_

typedef int (* gprs_at_send_function)(const char* pATSend,int len);   // 发送函数
typedef int (* gprs_at_recv_function)(char* pATRecv,int len);   // 接收函数 
typedef struct
{
    const char* pATSend;    // at 发送命令字符串
    gprs_at_send_function sendFunction;	//发送的函数
    u32 uiOneTimeOut;       // 发送单次超时时间
    u32 uiMaxTimeOut;       // 发送总共超时次数
    const char* pATRecv;    // at 接收命令字符串
    gprs_at_recv_function recvFunction;	//接收的函数

    u8 ucNextStatus;        // 接收OK的下一个状态
    u8 ucTimeOutStatus;     // 超时的下一个状态
}SGPRS_AT;  

// 心跳包结构体
struct HeartBeatReport{
    uint8_t sendTimer;
    uint8_t totalTimer;
};

#define ATSENDBUFFMAX        128	
#define SendBUFFMAX          2048

#define WIFI_HeartBeat_ScanTime        10   // 心跳包检测扫描间隔HZ
#define WIFI_HeartBeat_Interval        (WIFI_HeartBeat_ScanTime * 8)   // 8s发送一次心跳包

#define sWIFI_AT_RST               0  // 模块复位
#define sWIFI_AT_Init              1  // 初始化wifi函数
#define sWIFI_AT_powerWait         2  // 开机等待
#define sWIFI_AT_ATE0              3  // 关闭回显
#define sWIFI_AT_WifiMode          4  // 更改模式为station
#define sWIFI_AT_change_ipr        5  // 更改波特率
#define sWIFI_AT_WifiCheck         6  // 判断是否连接wifi
#define sWIFI_AT_DisconnectWifi    7  // 断开当前wifi的连接
#define sWIFI_AT_WifiAssign        8  // 尝试连接指定wifi
#define sWIFI_AT_WifiState         9  // 查询wifi连接状态
#define sWIFI_AT_WifiCSQ           10 // 开机流程查询信号强度
#define sWIFI_AT_OpenSocket        11 // 开始Socket服务 push模式
#define sWIFI_AT_CloseSocket       12 // 关闭Socket连接
#define sWIFI_AT_SendTransient     13 // 发送瞬态数据（快速上线）
#define sWIFI_AT_CheckSend         14 // 检查是否需要发送数据到云平台
#define sWIFI_AT_SendDataBefore    15 // 发送AT命令
#define sWIFI_AT_SendData          16 // 发送数据命令
#define sWIFI_AT_OftenCSQ          17 // 经常查询信号强度


void WIFI_Init(void);
void WIFI_ProcessHandle(int t);
void WIFI_HeartReportHandle(void);
void WIFI_SetStatus(u8 ucstatus);
char * WIFI_GetSendBuff(void);
uint32_t * WIFI_GetSendLen(void);
uint8_t WIFI_GetStatus(void);

extern char GPSStatus[1];
extern char GPSCount[2];

#endif
